package com.lv.dao;


import com.lv.bean.User;
import com.lv.utils.BaseUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.util.List;

public class UserDaoImpl implements UserDao {

    /**
     * 查询所有用户
     * @return
     */
    @Override
    public List<User> selectUser() {
        //创建QueryRunner
        //记住查询是BeanListHandler区别增删改的方法BeanHandler
        QueryRunner qr=BaseUtils.getQueryRunner();
        try {
            String sql="select * from user ";
            //这句话就相当于之前写的下面这一长串代码，这就是QueryRunner的方便之处
            return qr.query(sql, new BeanListHandler<>(User.class));

        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 根据用户id查询用户
     * @param userId 用户id
     * @return 用户对象
     */
    @Override
    public User selectUserId(String  userId) {
        //创建QueryRunner
        QueryRunner qr=BaseUtils.getQueryRunner();
        String sql="select * from user where userid=? ";
        try {
            //使用QueryRunner的强大之处在于此处。
            return qr.query(sql,new BeanHandler<>(User.class), userId);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 根据条件查询用户
     * @param sql sql语句
     * @param list 条件参数集合
     * @return  用户集合
     */
    public List<User> select(String sql, List<Object> list) {
        //创建QueryRunner
        QueryRunner qr=BaseUtils.getQueryRunner();
        try {
            //第一个参数是传来的sql，第二个是实现实体类的设置，第三个是集合转化为数组
            return qr.query(sql, new BeanListHandler<>(User.class), list.toArray());

        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 查询前十名
     * @return 用户集合
     */
    @Override
    public List<User> selectTop10User() {
        QueryRunner qr=BaseUtils.getQueryRunner();
        try {
            String sql="select * from `user`  ORDER BY totalScore DESC LIMIT 20;";
            //这句话就相当于之前写的下面这一长串代码，这就是QueryRunner的方便之处
            return qr.query(sql, new BeanListHandler<>(User.class));

        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


}
